package com.lanjing.common.core.result;

import com.alibaba.fastjson.JSON;
import lombok.Data;

import java.util.HashMap;
import java.util.Map;

/**
 * 内容摘要：统一返回结果的类。
 * @author zhangyitao
 */
@Data
public class Response {

    /** 是否成功 */
    private Boolean success;
    /** 返回状态码 */
    private Integer code;
    /** 返回消息 */
    private String message;
    /** 返回数据 */
    private Map<String, Object> data;

    /**
     * 函数名称：success
     * 函数功能：返回一个带有成功的状态码和消息的JSON字符串
     * 参数说明及返回值：
     *      @return String JSON字符串
     */
    public static String success(){
        return success(null);
    }

    /**
     * 函数名称：success
     * 函数功能：通过传入的参数，返回一个带有成功的状态码和消息以及数据的JSON字符串
     * 参数说明及返回值：
     *      @param key 存储数据的键
     *      @param value 存储数据的值
     *      @return String JSON字符串
     */
    public static String success(String key, Object value){
        Map<String, Object> data = new HashMap<>();
        data.put(key, value);
        return success(data);
    }

    /**
     * 函数名称：success
     * 函数功能：通过传入的参数，返回一个带有成功的状态码和消息以及数据的JSON字符串
     *      @param data 以键值对形式存储的数据
     *      @return String JSON字符串
     */
    public static String success(Map<String, Object> data){
        Response response = new Response();
        response.setSuccess(true);
        response.setCode(200);
        response.setMessage("ok");
        response.setData(data);
        return JSON.toJSONString(response);
    }

    /**
     * 函数名称：error
     * 函数功能：返回一个带有失败的状态码和消息的JSON字符串
     * 参数说明及返回值：
     *      @return String JSON字符串
     */
    public static String error(){
        return error(500,"服务器繁忙");
    }

    /**
     * 函数名称：error
     * 函数功能：通过传入的参数，返回一个带有失败的状态码（自定义）和消息（自定义）的JSON字符串
     * 参数说明及返回值：
     *      @param code 返回状态码
     *      @param message 返回消息
     *      @return String JSON字符串
     */
    public static String error(Integer code, String message){
        Response response = new Response();
        response.setSuccess(false);
        response.setCode(code);
        response.setMessage(message);
        return JSON.toJSONString(response);
    }

    /**
     * 函数名称：error
     * 函数功能：通过传入的参数，返回一个带有失败的状态码（自定义）和消息（已指定）的JSON字符串
     * 参数说明及返回值：
     *      @param code 返回状态码
     *      @return String JSON字符串
     */
    public static String error(Integer code){
        return error(code,"服务器繁忙");
    }

    /**
     * 函数名称：error
     * 函数功能：通过传入的参数，返回一个带有失败的状态码（已指定）和消息（自定义）的JSON字符串
     *      @param message 返回消息
     *      @return String JSON字符串
     */
    public static String error(String message){
        return error(500,message);
    }

    /**
     * 函数名称：error
     * 函数功能：通过传入的参数，返回一个带有失败的状态码（自定义）和消息（自定义）的JSON字符串
     *      @param message 返回消息
     *      @param code 返回状态码
     *      @return String JSON字符串
     */
    public static String error(String message, Integer code){
        return error(code, message);
    }
}
